1 using System.Collections;
2 using
System.Collections.Generic;
3 using
UnityEngine;
4 using
System.Linq;
5 using
UnityEngine.UI;
6 using
UnityEngine.SceneManagement;
7
8 public
class GameplayController : MonoBehaviour {
9
10     
public static GameplayController instance;
11
12     
public bool gameInProgress;
13     
public Transform player;
14     
public CameraFollow camera;
15     
public Text scoreText, shotText, highscore;
16     
public GameObject gameOverPanel, gameWinPanel, pausePanel;
17
18     
[HideInInspector]
19     
public bool lastShot;
20
21     
private bool gameFinished, checkGameStatus;
22     
private List<GameObject> enemies;
23     
private List<GameObject> objects;
24     
private float timeAfterLastShot, distance, time, timeSinceStartedShot;
25     
private int prevLevel;
26
27     
void Awake(){
28         CreateInstance ();
29     }
30
31     
// Use this for initialization
32     
void Start () {
33         InitializeVariables ();
34
35         
if (GameController.instance != null && MusicController.instance != null) {
36             
if (GameController.instance.isMusicOn) {
37                 MusicController.instance.GameplaySound ();
38             }
else {
39                 MusicController.instance.StopAllSounds ();
40             }
41         }
42             
43     }
44     
45     
// Update is called once per frame
46     
void Update () {
47         
if (gameInProgress) {
48             GameIsOnPlay ();
49             DistanceBetweenCannonAndBullet ();
50         }
51
52
53         
if(GameController.instance != null){
54             UpdateGameplayController ();
55         }
56             
57     }
58
59     
void CreateInstance(){
60         
if(instance == null){
61             instance =
this;
62         }
63     }
64
65     
void UpdateGameplayController(){
66         scoreText.text = GameController.instance.score.ToString(
"N0");
67         shotText.text =
"X" + PlayerBullet ();
68     }
69
70     
void InitializeVariables(){
71         gameInProgress =
true;
72         enemies =
new List<GameObject> (GameObject.FindGameObjectsWithTag ("Enemy"));
73         objects =
new List<GameObject> (GameObject.FindGameObjectsWithTag ("Object"));
74         distance =
10f;
75         
if(GameController.instance != null){
76             GameController.instance.score =
0;
77             prevLevel = GameController.instance.currentLevel;
78             highscore.transform.GetChild (
0).transform.GetComponent<Text> ().text = GameController.instance.highscore [GameController.instance.currentLevel - 1].ToString ("N0");
79
80             
if(GameController.instance.highscore[GameController.instance.currentLevel - 1] > 0){
81                 highscore.gameObject.SetActive (
true);
82             }
83
84         }
85             
86     }
87         
88     
void GameIsOnPlay(){
89         
/*if (PlayerBullet () == 0) {
90             timeAfterLastShot += Time.deltaTime;
91             camera.isFollowing =
false;
92             
if (timeAfterLastShot > 2f) {
93                 
if (AllStopMoving () && AllEnemiesDestroyed ()) {
94                     
if (!gameFinished) {
95                         gameFinished =
true;
96                         Debug.Log (
"Hello World");
97                     }
98                 }
else if (AllStopMoving () && !AllEnemiesDestroyed ()) {
99                     
if (!gameFinished) {
100                         gameFinished =
true;
101                         Debug.Log (
"Hi World");
102                     }
103                 }
104             }
105
106         }*/

107
108         
if(checkGameStatus){
109             timeAfterLastShot += Time.deltaTime;
110             
if (timeAfterLastShot > 2f) {
111                 
if (AllStopMoving () || Time.time - timeSinceStartedShot > 8f) {
112                     
if (AllEnemiesDestroyed ()) {
113                         
if (!gameFinished) {
114                             gameFinished =
true;
115                             GameWin ();
116                             timeAfterLastShot =
0;
117                             checkGameStatus =
false;
118                         }
119                     }
else {
120                         
if (PlayerBullet () == 0) {
121                             
if (!gameFinished) {
122                                 gameFinished =
true;
123                                 timeAfterLastShot =
0;
124                                 checkGameStatus =
false;
125                                 GameLost ();
126                             }
127                         }
else {
128                             checkGameStatus =
false;
129                             camera.isFollowing =
false;
130                             timeAfterLastShot =
0;
131                         }
132                     }
133                 }
134             }
135
136         }
137
138     }
139
140     
void GameWin(){
141         
if(GameController.instance != null && MusicController.instance != null){
142             
if(GameController.instance.isMusicOn){
143                 AudioSource.PlayClipAtPoint (MusicController.instance.winSound, Camera.main.transform.position);
144             }
145
146             
if(GameController.instance.score > GameController.instance.highscore[ GameController.instance.currentLevel - 1]){
147                 GameController.instance.highscore [ GameController.instance.currentLevel -
1] = GameController.instance.score;
148             }
149
150             highscore.text = GameController.instance.highscore [GameController.instance.currentLevel].ToString (
"N0");
151
152             
int level = GameController.instance.currentLevel;
153             level++;
154             
if(!(level-1 >= GameController.instance.levels.Length)){
155                 GameController.instance.levels [level -
1] = true;
156             }
157
158             GameController.instance.Save ();
159             GameController.instance.currentLevel = level;
160         }
161         gameWinPanel.SetActive (
true);
162
163     }
164
165     
void GameLost(){
166         
if(GameController.instance != null && MusicController.instance != null){
167             
if(GameController.instance.isMusicOn){
168                 AudioSource.PlayClipAtPoint (MusicController.instance.loseSound, Camera.main.transform.position);
169             }
170         }
171         gameOverPanel.SetActive (
true);
172     }
173
174
175     
public int PlayerBullet(){
176         
int playerBullet = GameObject.FindGameObjectWithTag ("Player").transform.GetChild (0).transform.GetComponent<Cannon> ().shot;
177         
return playerBullet;
178     }
179
180
181
182     
private bool AllEnemiesDestroyed(){
183         
return enemies.All(x => x == null);
184     }
185
186
187     
private bool AllStopMoving(){
188         
foreach (var item in objects.Union(enemies)) {
189             
if(item != null && item.GetComponent<Rigidbody2D>().velocity.sqrMagnitude > 0){
190                 
return false;
191             }
192                 
193         }
194
195         
return true;
196     }
197
198     
void DistanceBetweenCannonAndBullet(){
199         GameObject[] bullet = GameObject.FindGameObjectsWithTag (
"Player Bullet");
200         
foreach (GameObject distanceToBullet in bullet) {
201             
if (!distanceToBullet.transform.GetComponent<CannonBullet> ().isIdle) {
202                 
if (distanceToBullet.transform.position.x - player.position.x > distance) {
203                     camera.isFollowing =
true;
204                     checkGameStatus =
true;
205                     timeSinceStartedShot = Time.time;
206                     TimeSinceShot ();
207                     camera.target = distanceToBullet.transform;
208                 }
else {
209                     
if(PlayerBullet() == 0){
210                         camera.isFollowing =
true;
211                         checkGameStatus =
true;
212                         timeSinceStartedShot = Time.time;
213                         TimeSinceShot ();
214                         camera.target = distanceToBullet.transform;
215                     }
216                 }
217             }
218         }
219         
/*if (GameObject.FindGameObjectWithTag ("Player Bullet") != null) {
220             
if (!GameObject.FindGameObjectWithTag ("Player Bullet").transform.GetComponent<CannonBullet> ().isIdle) {
221                 Transform distanceToBullet = GameObject.FindGameObjectWithTag (
"Player Bullet").transform;
222                 
if (distanceToBullet.position.x - player.position.x > distance) {
223                     camera.isFollowing =
true;
224                     checkGameStatus =
true;
225                     TimeSinceShot ();
226                     camera.target = distanceToBullet;
227                 }
228             }
229                 
230         }*/

231     }
232
233     
void TimeSinceShot(){
234         time += Time.deltaTime;
235         
if (time > 3f) {
236             time =
0f;
237             GameObject.FindGameObjectWithTag (
"Player Bullet").transform.GetComponent<CannonBullet> ().isIdle = true;
238         }
239             
240     }
241
242     
public void RestartGame(){
243         SceneManager.LoadScene (SceneManager.GetActiveScene().buildIndex);
244         
if(GameController.instance != null){
245             GameController.instance.currentLevel = prevLevel;
246         }
247     }
248
249     
public void BackToLevelMenu(){
250         
if(GameController.instance != null && MusicController.instance != null){
251             
if (GameController.instance.isMusicOn) {
252                 MusicController.instance.PlayBgMusic ();
253             }
else {
254                 MusicController.instance.StopAllSounds ();
255             }
256         }
257         SceneManager.LoadScene (
"Level Menu");
258         Time.timeScale =
1;
259     }
260
261     
public void ContinueGame(){
262         
if (GameController.instance != null) {
263             SceneManager.LoadScene (
"Level " + GameController.instance.currentLevel);
264         }
265     }
266
267     
public void PauseGame(){
268         
if (gameInProgress) {
269             gameInProgress =
false;
270             Time.timeScale =
0;
271             pausePanel.SetActive (
true);
272         }
273     }
274
275     
public void ResumeGame(){
276         Time.timeScale =
1;
277         gameInProgress =
true;
278         pausePanel.SetActive (
false);
279     }
280
281
282         
283
284 }


Use this for initialization

Update is called once per frame




trò chơi Cannon Siege miễn phí 12.307 lượt xem

Gõ tìm kiếm nhanh...